Software applications in modern enterprise data processing environments typically constitute many thousands of lines of source code and implement complex functionality. For example, the Apache web server, a widely available, open source web server, comprises at least 80,000 lines of source code. The Linux operating system, exceeds 1.6 million lines of source code. Testing such software products is a time-consuming task. Testing of software involves the invocation of the program functionality, and, typically, validating the correctness of the results of that functionality.
The testing of software includes the execution of one or more testcases which are designed to exercise the operations that implement the functionality of the software under task. The testcases are run to verify that the software under test does not fail for the testcase conditions, and additionally verify that the output generated is correct.
Generally, software testing includes activities that are performed by members of the software development team, and other activities that are automated, that is, performed by another software program.
Data processing systems, particularly in an enterprise environment, typically constitute a networked data processing system in which a set of commonly-accessed resources provide services to a multiplicity of users attached to the network. These services may include electronic mail (e-mail) services, Internet access, distributed computing services, input/output services, such as printing, etc. Moreover, the software deployed to provide such services as well as to access those services may be deployed across a multiplicity of platforms, that is, operating systems. Corresponding thereto, in the testing of a software product, it may be desirable to run testcases across multiple hosts and platforms. For example, in automating the concurrent navigation of multiple graphical user interfaces (GUIs), each GUI may be navigated by a corresponding process.
However, testcases that use more than one testcase process may give rise to race conditions. For example, one testcase process may generate output used by a second testcase process. Thus, the two processes must be synchronized to avoid the second process executing before the first.
Consequently, there is a need in the art for systems and methods to automate the execution of software testcases using multiple testcase processes deployed across multiple hosts and platforms. Additionally, there are needs in the art for such systems and methods which include mechanisms for mitigating against race conditions.